﻿using DX;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Tools.ViewModels;

namespace Tools
{
    class StartUp : IStartUp
    {

        public StartUp(IConfiguration configuration, IHostEnvironment environment, ILoggerFactory loggerFactory)
        {
            this.configuration = configuration;
            this.environment = environment;
            logger = loggerFactory.CreateLogger<StartUp>();
        }
        private readonly IConfiguration configuration;
        private readonly IHostEnvironment environment;
        private readonly ILogger logger;

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IManifestFileService, ManifestFileService>();
            // 使用微软的依赖注射
            // 通过 Host 创建程序
            // AddForm、AddRoute 都是使用CommunityToolkit.Mvvm 框架绑定View 和 ViewModel 的关系
            // AddForm、AddRoute 只能2选1
            // AddForm 更传统，在引用到一个主程序中会比较方便 因为是硬编码调用,编译
            // AddRoute 更灵活特别是动态加载的，缺点就是调用地址后可能会返回错误
            services.AddForm(option =>
            {
                option.MainViewModelType = typeof(MainViewModel);//默认页面
                // 内部通过
                // Show 不阻塞，ShowDialog 阻塞
                // ViewModel 通过 Show(typeof(XXXxxxViewModel))创建窗口
                // ViewModel 通过 Show(typeof(XXXxxxViewModel),XXXxxxViewModel.Office )创建指定界面的窗口
                // ViewModel 通过 Show(typeof(XXXxxxViewModel),new ViewOption{ ViewCode = "Office", Arges = new []{xxxx,yyyyy} }创建指定界面的窗口并向对应的ViewModel传参数
                // ViewModel 通过 ShowDialog(typeof(XXXxxxViewModel)).Result 得到窗口返回的值
                // ViewModel 通过 ShowDialog<T>(typeof(XXXxxxViewModel)).Result 得到窗口返回的值
                // ViewModel 通过 ShowDialog(typeof(XXXxxxViewModel),new ViewOption{ ViewCode = "Office", Arges = new []{xxxx,yyyyy}).Result 创建指定界面的窗口并向对应的ViewModel传参数,得到返回的值 
                // ViewModel 通过 ShowDialog<T>(typeof(XXXxxxViewModel),new ViewOption{ ViewCode = "Office", Arges = new []{xxxx,yyyyy}).Result 创建指定界面的窗口并向对应的ViewModel传参数,得到返回的值
            });
            /*
             services.AddRoute(option =>
             {
                 option.MainViewModelType = typeof(MainViewModel);//默认页面
                 // 内部通过
                 // Route 不阻塞，RouteDialog阻塞
                 // ViewModel 通过 Route("xxxxx/xxxxx/xxxxx")创建窗口
                 // ViewModel 通过 Route("xxxxx/xxxxx/xxxxx","Office")创建指定界面的窗口
                 // ViewModel 通过 Route("xxxxx/xxxxx/xxxxx",new ViewOption{ ViewCode = "Office", Arges = new []{xxxx,yyyyy} }创建指定界面的窗口并向对应的ViewModel传参数
                 // ViewModel 通过 RouteDialog("xxxxx/xxxxx/xxxxx") 得到窗口返回的值
                 // ViewModel 通过 RouteDialog<T>("xxxxx/xxxxx/xxxxx") 得到窗口返回的值
             });*/
        }

        public void Configure(IApplicationBuilder app, IHostEnvironment environment)
        {
            System.ArgumentNullException.ThrowIfNull(app);
            System.ArgumentNullException.ThrowIfNull(environment);
        }
    }
}